import { createRouter, createWebHistory } from 'vue-router'
import constantRoutes from './constant'
import { userStore } from '@/stores/modules/user'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
// 配置NProgress选项
NProgress.configure({
  easing: 'ease', // 动画方式
  speed: 500, // 递增进度条的速度
  showSpinner: false, // 是否显示加载ico
  trickleSpeed: 200, // 自动递增间隔
  minimum: 0.3 // 初始化时的最小百分比
})

const router = createRouter({
  history: createWebHistory(),
  routes: constantRoutes
})

// 路由前置守卫
const whiteList = ['/login', '/404']
router.beforeEach((to, from, next) => {
  // 启动进度条
  if (NProgress.isStarted()) {
    NProgress.done()
  }
  NProgress.start()
  // 设置页面标题
  document.title = '题目管理系统'
  const store = userStore()
  // 如果是白名单路径
  if (whiteList.includes(to.path)) {
    // 已登录且要跳转登录页，重定向到首页
    if (store.isLogin && to.path === '/login') {
      next('/')
      return
    }
    next()
    return
  }

  // 非白名单路径必须登录
  if (!store.isLogin) {
    next('/login')
    return
  }

  next()
})
// 全局后置守卫
router.afterEach(() => {
  // 结束进度条
  NProgress.done()
})
// 路由错误处理
router.onError(() => {
  // 发生错误时也要结束进度条
  NProgress.done()
})

export default router
